package cn.tedu.tmall.admin.content.service.impl;

import cn.tedu.tmall.admin.content.dao.persist.respository.ICategoryRepository;
import cn.tedu.tmall.admin.content.pojo.param.CategoryAddParam;
import cn.tedu.tmall.admin.content.pojo.po.CategoryPO;
import cn.tedu.tmall.admin.content.service.ICategoryService;
import cn.tedu.tmall.common.enumerator.ServiceCode;
import cn.tedu.tmall.common.ex.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 资讯管理类别Service
 */
@Slf4j
@Service("saveCategoryToDB")
public class CategorySaveToDBServiceImpl implements ICategoryService {

    @Autowired
    private ICategoryRepository categoryRepository;

    @Override
    public void addCategory(CategoryAddParam categoryAddParam) {
        log.debug("Service 开始处理添加分类 :入参:{}",categoryAddParam);
        //1 基本验证 通过验证框架验证了类别名称不能为空,长度不能太长
        //2 业务验证 数据库表里有了 "功效" 这个分类,我还能添加一个功效么?
        //   不行,报错,添加类别失败,类别名称已经存在.
        //3 保存类别到数据库
        //    我们想知道保存是否成功 ,如果成功了,返回,如果失败了,报错.
        String name = categoryAddParam.getName();
        //通过名称去查下,这个名称有几条记录
        int count = categoryRepository.countByName(name);
        //类别名称数据库大于1条记录 报错
        if (count > 0) {
            String message = "添加类别失败,类别名称已经存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERROR_BAD_REQUEST,message);
        }
        //保存数据
        CategoryPO categoryPO = new CategoryPO();
        BeanUtils.copyProperties(categoryAddParam,categoryPO);
        int rows = categoryRepository.save(categoryPO);
        //保存的结果 如果不等于1 报错
        if (rows != 1 ){
            String message = "添加类别失败,数据库忙!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERROR_UNKNOWN,message);
        }
        log.debug("保存分类到数据库成功");
        log.debug("Service 处理添加分类完成 :入参:{}",categoryAddParam);
    }
}
